package com.dxf.chepter08

/**
 * 所有线程安全集合都是以 Synchronized开头的集合
 *
 * SynchronizedBuffer
 * SynchronizedMap
 * SynchronizedPriorityQueue
 * SynchronizedQueue
 * SynchronizedSet
 * SynchronizedStack
 *
 *
 * ===================================
 *
 *
 *    并行集合
 *    1 Scala为了充分利用多核CPU,提供并行集合(有别于前面的串行集合),用于多核环境的并行计算
 *    2 主要用到算法
 *    2.1 Divide and conquer: 分治算法,通过splitters(分解器),combiners(组合器)
 *    2.2 work stealin算法,主要用于任务调度负载均衡(load-balabcing), => 就完成自己任务后发现其他人活没干完,主动帮他人一起干
 *
 *  案例
 *  打印 1-5
 *  (1 to 5).foreach(println)
 *
 *  并行集合  集合.par
 *    (1 to 5).par.foreach(println).map()
 *
 *
 */
object T104_线程安全集合 {


  def main(args: Array[String]): Unit = {

    //并行集合
    // 打印 1-5
    val start1 = System.currentTimeMillis()
    (1 to 5).foreach(println)

    val end1 = System.currentTimeMillis()
    println()
    val start2 = System.currentTimeMillis()
    //.par 并行计算
    (1 to 5).par.foreach(println)
    val end2 = System.currentTimeMillis()

    println("a=" +(end1-start1) , "b="+(end2-start2))


    println("================================================")

    var result1 = (0 to 100).map{
      case _=>Thread.currentThread().getName
    }.distinct
    var result2 = (0 to 100).par.map{
      case _=>Thread.currentThread().getName
    }.distinct

    println(result1)//非并行
    println(result2)//并行




  }

  def multiple(num: Int): Int = {
    num
  }

  def eq(i: Int): Boolean = {
    i.toString.equals(i.toString.reverse)
  }


}

